#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

//int status = 0;
void Worker(int number)
{
    int *p = NULL;
    int cnt = 10;
		while(cnt)
    {
      	printf("I am child process, pid: %d, ppid: %d, cnt: %d, number: %d\n", getpid(), getppid(), cnt--, number);
        sleep(1);
        //*p = 100;
        //int a = 10;
      	//a /= 0;
    }
}
	const int n = 10;

int main()
{
	for(int i=0;i<n;i++)
	{
			pid_t id =fork();
			if(id == 0)
			{
					Worker(i);
					//status=i;
					exit(0);
			}
	}	
}

    //等待多个子进程？
    //    for(int i = 0; i < n; i++)
    //        {
    //                int status = 0;
    //                        pid_t rid = waitpid(-1, &status, 0); // pid>0, -1:任意一个退出的子进程
    //                                if(rid > 0){
    //                                            printf("wait child %d success, exit code: %d\n", rid, WEXITSTATUS(status));
    //                                                    }
    //                                                        }
    //
    //
    //
    //
    //
    //                                                            //pid_t id = fork();
    //                                                                //if(id == 0)
    //                                                                    //{
    //                                                                        //    //child
    //                                                                            //    Worker();
    //                                                                                //    exit(1);
    //                                                                                    //}
    //                                                                                        //else{
    //                                                                                            //    //sleep(10);
    //                                                                                                //    // father
    //                                                                                                    //    printf("wait before\n");
    //                                                                                                        //    // 在子进程运行期间，父进程有没有调用wait呢？在干什么呢？
    //                                                                                                            //    //pid_t rid = wait(NULL);
    //                                                                                                                //    int status = 0;
    //                                                                                                                    //    pid_t rid = waitpid(id, &status, 0);
    //                                                                                                                        //    printf("wait after\n");
    //                                                                                                                            //    if(rid == id)
    //                                                                                                                                //    {
    //                                                                                                                                    //        // 我们不能对status整体使用
    //                                                                                                                                        //        ///printf("wait success, pid: %d, rpid: %d, exit sig: %d, exit code: %d\n", getpid(), rid, status&0x7F, (status>>8)&0xFF);
    //                                                                                                                                            //        if(WIFEXITED(status))
    //                                                                                                                                                //        {
    //                                                                                                                                                    //            printf("child process normal quit, exit code : %d\n", WEXITSTATUS(status));
    //                                                                                                                                                        //        }
    //                                                                                                                                                            //        else{
    //                                                                                                                                                                //            printf("child process quit except!\n");
    //                                                                                                                                                                    //        }
    //                                                                                                                                                                        //    }
    //                                                                                                                                                                            //}
    //                                                                                                                                                                                return 0;
    //                                                                                                                                                                                }
    //
    //
    //                                                                                                                                                                                ////int fun()
    //                                                                                                                                                                                ////{
    //                                                                                                                                                                                ////    printf("call fun function done!\n");
    //                                                                                                                                                                                ////    //return 11;
    //                                                                                                                                                                                ////    // 任意地点调用exit，表示进程退出，不进行后续执行
    //                                                                                                                                                                                ////    //_exit(21);
    //                                                                                                                                                                                ////}
    //                                                                                                                                                                                //
    //                                                                                                                                                                                //
    //                                                                                                                                                                                //int main()
    //                                                                                                                                                                                //{
    //                                                                                                                                                                                //    printf("you can see me !");
    //                                                                                                                                                                                //    sleep(3);
    //                                                                                                                                                                                //    _exit(1);
    //                                                                                                                                                                                //
    //                                                                                                                                                                                ////    fun();
    //                                                                                                                                                                                ////
    //                                                                                                                                                                                ////    printf("I am a process, pid: %d, ppid: %d\n",getpid(), getppid());
    //                                                                                                                                                                                //    // 参数是进程的退出码，类似于main return n
    //                                                                                                                                                                                //    //_exit(12);
    //                                                                                                                                                                                //
    //                                                                                                                                                                                //    // 1. 在main函数中进行直接return
    //                                                                                                                                                                                //    // 2. 在其他函数中进行return,表示的是函数调用结束
    //                                                                                                                                                                                //    //return 21;
    //                                                                                                                                                                                //}
